package com.gzc.just.play.last.war.common.thread;

import com.gzc.just.play.last.war.common.serializer.MessageDeserializer;
import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger;

/**
 * 消息处理器抽象类
 * 为基于线程的消息处理提供基础功能
 */
public abstract class MessageHandler {
    private final int messageId;
    private final MessageDeserializer deserializer;
    private final Logger logger;
    
    /**
     * 构造函数
     * @param messageId 消息ID
     * @param deserializer 反序列化器
     * @param logger 日志记录器
     */
    public MessageHandler(int messageId, MessageDeserializer deserializer, Logger logger) {
        this.messageId = messageId;
        this.deserializer = deserializer;
        this.logger = logger;
    }
    
    /**
     * 处理消息
     * @param message 反序列化后的消息对象
     * @param context Netty通道上下文
     * @throws Exception 处理异常
     */
    public abstract void handleMessage(Object message, ChannelHandlerContext context) throws Exception;
    
    /**
     * 获取消息ID
     * @return 消息ID
     */
    public int getMessageId() {
        return messageId;
    }
    
    /**
     * 获取反序列化器
     * @return 反序列化器
     */
    public MessageDeserializer getDeserializer() {
        return deserializer;
    }
    
    /**
     * 获取日志记录器
     * @return 日志记录器
     */
    public Logger getLogger() {
        return logger;
    }
}